package edu.zueb.sport.rest.api;

/**
 * @author jasonfu
 * @date 2024/9/13 20:41
 */
public record RestResponse<T>(Integer code, String retMsg, T data) {

    /**
     * 成功状态码（默认值为0）
     * 用于标识API请求处理成功的响应状态
     */
    public static final int CODE_SUCCESS = 0;

    /**
     * 失败状态码（默认值为1）
     * 用于标识API请求处理失败的响应状态
     */
    public static final int CODE_FAIL = 1;

    /**
     * 创建一个成功的RestResponse对象，包含指定的数据
     * 此方法用于简化响应对象的创建过程，当响应成功时，使用此方法快速构建携带数据的响应
     *
     * @param <T>  泛型参数，表示响应数据的类型
     * @param data 响应中携带的数据，可以是任意类型
     * @return 包含指定数据的成功RestResponse对象
     */
    public static <T> RestResponse<T> success(T data) {
        return new RestResponse<>(CODE_SUCCESS, "success", data);
    }

    /**
     * 创建一个表示失败的REST响应对象
     * 此方法用于当API调用失败时，返回一个包含错误信息的RestResponse对象
     * 该方法是泛型的，允许返回任意类型的RestResponse对象
     *
     * @param retMsg 错误信息，用于告知调用者API调用失败的原因
     * @return RestResponse对象，包含错误信息，表示API调用失败
     */
    public static <T> RestResponse<T> fail(String retMsg) {
        return new RestResponse<>(CODE_FAIL, retMsg, null);
    }
}
